我bsh-2.0b4.jar通过进入Project structure -> Modules -> myProject -> Tab-Dependencies -> + Sign然后添加.jar文件将外部库添加到android-studio中的android项目中.我还尝试将文件复制到/ libs目录,然后在工作室中右键单击add as library...(两种方法独立!!).我插入以下代码作为测试
import bsh.Interpreter;
...
Interpreter interpreter = new Interpreter();
interpreter.eval("result = (7+21*6)/(32-27)");
return interpreter.get("result").toString();
Run Code Online (Sandbox Code Playgroud)
我用android中的buildin按钮编译.build.gradle看起来像:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 17
}
}
dependencies {
compile 'com.android.support:support-v4:13.0.+'
}
Run Code Online (Sandbox Code Playgroud)
但是当我编译所有内容时,我收到错误
Gradle: error: package bsh does not exist …Run Code Online (Sandbox Code Playgroud) 如果我有一个结构,我希望能够使用(使用encoding/xml)进出xml的Marhsal/Unmarshal内容 - 我怎么能不打印空的属性?
package main
import (
"encoding/xml"
"fmt"
)
type MyThing struct {
XMLName xml.Name `xml:"body"`
Name string `xml:"name,attr"`
Street string `xml:"street,attr"`
}
func main() {
var thing *MyThing = &MyThing{Name: "Canister"}
result, _ := xml.Marshal(thing)
fmt.Println(string(result))
}
Run Code Online (Sandbox Code Playgroud)
例如,请参阅http://play.golang.org/p/K9zFsuL1Cw
在上面的操场上,我不想写出我的空街道属性; 我怎么能这样做?
package main
import (
"fmt"
"time"
)
func main() {
storage := []string{}
for i := 0; i < 50000000; i++ {
storage = append(storage, "string string string string string string string string string string string string")
}
fmt.Println("done allocating, emptying")
storage = storage[:0]
storage = nil
for {
time.Sleep(1 * time.Second)
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将分配大约 30mb 的内存,然后不会释放它。这是为什么?如何强制释放此切片使用的内存?我把那片切成薄片,然后把它磨碎了。
我正在调试的程序是一个简单的 HTTP 输入缓冲区:它将所有请求附加到大块中,并通过通道将这些块发送到 goroutine 进行处理。但问题如上所示 - 我无法通过存储来释放内存,然后最终耗尽内存。
编辑:正如有些人对类似问题指出的那样,不,它首先不起作用,其次不是我所要求的。切片被清空,内存不会。
我遇到了一个非常麻烦的问题,我花了大约一个小时来确定导致问题的原因,但我不知道为什么:
我html/template用来翻页网页,代码是这样的:
t, _ := template.parseFiles("template/index.tmpl")
...
t.Execute(w, modelView) // w is a http.ResponseWriter and modelView is a data struct.
Run Code Online (Sandbox Code Playgroud)
但不知不觉中,我犯了一个错误,让<textarea>标签打开:
<html>
<body>
<form id="batchAddUser" class="form-inline">
**this one** --> <textarea name="users" value="" row=3 placeholder="input username and password splited by space">
<button type="submit" class="btn btn-success" >Add</button>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后Go没有给出任何异常和其他提示,但只是给出一个没有任何内容的空白页面,状态代码是200.
由于没有提供任何信息,它可以解决问题,但为什么会这样呢?一个未着色的标签怎么会引起这样的问题呢?以及如何调试?
索引超出范围错误,在for循环生成的goroutine中似乎不可能
这是我正在执行的代码.问题是索引超出范围错误是在对goroutine中countlinks调用的一个参数的评估中产生的.我们正在迭代的切片的长度总是2.基于我对go中的for循环的理解,i永远不应该评估为2(在表达式中产生索引超出范围grph.entryPoints[i]),但它是.拜托,告诉我我是多么疯狂.
func main() {
grph := structures.ConfigGraphDefault()
counter := structures.NewCounter()
queue := structures.NewQueue()
tracker := structures.NewTracker()
fmt.Printf("entries: %v\nnodes: %v\n", grph.EntryPoints, grph.Nodes)
wg := sync.WaitGroup{}
fmt.Println(len(grph.EntryPoints))
// this will always evaluate to 2
l := len(grph.EntryPoints)
for i := 0; i < l; i++ {
wg.Add(1)
go func() {
fmt.Printf("index: %v, length of slice: %v\n", i, len(grph.EntryPoints))
structures.CountLinks(&grph, counter, queue, tracker, grph.EntryPoints[i], i)
wg.Done()
}()
}
wg.Wait()
fmt.Printf("counter: %v", counter.GetCounts())
}
Run Code Online (Sandbox Code Playgroud) 我知道Bitwise运算符&,| 和^是按位运算符或逻辑运算符...取决于操作数的类型.
如果操作数是整数,则运算符是按位的.如果他们是布尔,那么运营商是合乎逻辑的.
那么为什么有逻辑运算符&&,|| 和!?我相信在某些情况下我们只能使用逻辑运算符,所以它们就是这样.
那么,任何人都可以解释这种情况吗?或者比按位操作有任何优势.
是否有可能让gradle知道使用单个工作线程进行所有单元测试?在控制台中,我可以看到并行调用许多gradle worker来执行单元测试.在我的情况下,这是不希望的,我希望Gradle以特定的顺序调用单元测试.我已经创建了多个测试任务并添加了dependsOn属性,因此已经应用了一个级别的排序.但是,对于某些测试任务,有多个单元测试,并且这些测试任务未按顺序排列.Gradle在这里聘请了多名工人.有没有办法使这也顺序?
这段代码正常工作,我的问题就是原因.我了解到,在阻止之前,您只能将一个值发送到无缓冲的通道.但是在我的代码中,我写了两次,但是来自不同的例行程序,它起作用.如果有人能向我解释原因,我将不胜感激!
func main(){
var ch chan string =make(chan string)
go write(ch)
go write2(ch)
go read(ch)
select{}
}
func write(ch chan string){
for{
ch<-"write1"
}
}
func write2(ch chan string){
for{
ch<-"write2"
}
}
func read(ch chan string){
for{
time.Sleep(time.Second)
select{
case res:= <-ch: fmt.Println(res)
case <-time.After(time.Millisecond*200): fmt.Println("time out")
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用类似下面的功能
import (
"m5/cmd/models"
)
func TypeCommand(m Modules) string {
…
}
Run Code Online (Sandbox Code Playgroud)
现在我要改变
func (m models.Modules) TypeCommand() string {
}
Run Code Online (Sandbox Code Playgroud)
现在我收到错误消息“未解决的类型模块”,为什么?第一个函数被编译...