我使用此方法获取图像中像素的整数值:
int colour = img.getRGB(x, y);
Run Code Online (Sandbox Code Playgroud)
然后我打印出值,我看到黑色像素对应的值如"-16777216",一种蓝色的像"-16755216"等等.有人可以解释一下这个值背后的逻辑吗?
paxPayment, ok = dataObject.(*entities.PassengerPayment)
括号用于什么?我不确定这个赋值操作中发生了什么.
您还需要更多细节才能回答这个问题吗?
试图让json Marshal包含2个时间字段的结构.但是如果它有时间价值,我只希望该字段能够通过.所以我正在使用,json:",omitempty"但它不起作用.
我可以将Date值设置为什么,因此json.Marshal会将其视为空(零)值,而不是将其包含在json字符串中?
游乐场:http://play.golang.org/p/QJwh7yBJlo
实际结果:
{ "时间戳": "2015-09-18T00:00:00Z", "日期": "0001-01-01T00:00:00Z"}
期望的结果:
{ "时间戳": "2015-09-18T00:00:00Z"}
码:
package main
import (
"encoding/json"
"fmt"
"time"
)
type MyStruct struct {
Timestamp time.Time `json:",omitempty"`
Date time.Time `json:",omitempty"`
Field string `json:",omitempty"`
}
func main() {
ms := MyStruct{
Timestamp: time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC),
Field: "",
}
bb, err := json.Marshal(ms)
if err != nil {
panic(err)
}
fmt.Println(string(bb))
}
Run Code Online (Sandbox Code Playgroud) 我一直在和别人的代码一起工作,我遇到了正则表达式[^0-9a-z-A-Z].这与[^0-9a-zA-Z]用于排除非字母数字字符的常见内容非常相似,但请注意中间的额外短划线,小写字母z和大写字母之间A.
我对正则表达式不太熟悉,但我现在已经阅读了几个页面,而且我看到的规则似乎都没有涵盖这种语法的含义.也许它甚至不是有效的语法,但Golang正则表达式解释器似乎并不介意.我很感激任何澄清.谢谢.
我有一个字符串数组,我想排除以foo_OR 开头的值超过7个字符.
我可以循环遍历每个元素,运行if语句,并将其添加到路径中的切片.但我很好奇是否有一种惯用的或更像golang的方式来完成它.
例如,同样的事情可能在Ruby中完成
my_array.select! { |val| val !~ /^foo_/ && val.length <= 7 }
Run Code Online (Sandbox Code Playgroud) 给定image.RGBA,坐标和一行文字,如何添加一个简单的标签与任何普通的固定字体?例如Face7x13来自font/basicfont.
package main
import (
"image"
"image/color"
"image/png"
"os"
)
func main() {
img := image.NewRGBA(image.Rect(0, 0, 320, 240))
x, y := 100, 100
addLabel(img, x, y, "Test123")
png.Encode(os.Stdout, img)
}
func addLabel(img *image.RGBA, x, y int, label string) {
col := color.Black
// now what?
}
Run Code Online (Sandbox Code Playgroud)
对齐并不重要,但最好是我可以将标签写在从坐标开始的线上方.
我想避免像字体这样的外部可加载依赖项.
我有最基本的net/http程序,我用来学习Go中的命名空间:
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.URL)
go HandleIndex(w, r)
})
fmt.Println("Starting Server...")
log.Fatal(http.ListenAndServe(":5678", nil))
}
func HandleIndex(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(200)
w.Write([]byte("Hello, World!"))
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序并连接到localhost:5678Chrome时,我在控制台中得到了这个:
Starting Server...
/
2015/01/15 13:41:29 http: multiple response.WriteHeader calls
/favicon.ico
2015/01/15 13:41:29 http: multiple response.WriteHeader calls
Run Code Online (Sandbox Code Playgroud)
但我不明白这是怎么可能的.我打印URL,启动一个新的goroutine,写一次标题,并给它一个静态的身体Hello, World!似乎正在发生两件事之一.幕后的任何东西都在写另一个标题,或者以某种方式HandleIndex为同一个请求调用两次.我该怎么做才能停止写多个标题?
编辑:它似乎与该go HandleIndex(w, r)行有关,因为如果我删除go并只是使它成为函数调用而不是goroutine,我没有任何问题,浏览器获取它的数据.由于它是goroutine,我得到多个WriteHeader错误,浏览器不显示"Hello World".为什么要把这个打破呢?
我已经看到了三种将内容写入HTTP响应的方法:
func Handler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "blabla.\n")
}
Run Code Online (Sandbox Code Playgroud)
和:
func Handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("blabla\n"))
}
Run Code Online (Sandbox Code Playgroud)
还有:
fmt.Fprintf(w, "blabla")
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?哪一个更喜欢使用?
我想在Golang中生成一系列数字,但我找不到任何内置函数.
基本上我想在Golang中等效PHP的范围函数:
array range ( mixed $start , mixed $end [, number $step = 1 ] )
Run Code Online (Sandbox Code Playgroud)
在创建数字类型的切片/数组时,您希望使用数字序列填充/初始化它.
我有以下代码,它应该rune投入一个string并打印出来.但是,我在打印时会得到未定义的字符.我无法弄清楚bug的位置:
package main
import (
"fmt"
"strconv"
"strings"
"text/scanner"
)
func main() {
var b scanner.Scanner
const a = `a`
b.Init(strings.NewReader(a))
c := b.Scan()
fmt.Println(strconv.QuoteRune(c))
}
Run Code Online (Sandbox Code Playgroud)