Golang Tips
2744 ワード
1)ローカル変数を返すアドレスは全く問題なく,Cとは異なる点に注意する.このローカル変数に対応するデータは、関数が返された後も有効です.
func NewFile(fd int, name string) *File {
if fd < 0 {
return nil
}
f := File{fd, name, nil, 0}
return &f
}
2)
make(T,
args)
new(T)
。 、 , T
( *T
) ( ) 。
make([]int, 10, 100)
100 int
, 10, 100 10 。
。
3)Map
, 。 , , 。
4)
%T
,
5)
type ByteSize float64
const (
//
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
6)channel
, 。 , 。 Go 。
c := make(chan int) //
// Go 。 , 。
go func() {
list.Sort()
c
。 , , ; , ; , 。
, 。 , handle
, , , “ ” 。 process
, 。
var sem = make(chan int, MaxOutstanding)
func handle(r *Request) {
sem
, : MaxOutstanding
Go , Serve
Go 。 , , 。 , Serve
Go , , Bug。
func Serve(queue chan *Request) {
for req := range queue {
sem
Bug Go for
サイクルでは、このサイクル は のたびに されるので、req
はすべてのGoパス で されます.これは たちが んでいるものではありません.req
がGoパスごとに であることを する があります.req
の を パラメータとしてGoパスの パケットに す がある.
func Serve(queue chan *Request) {
for req := range queue {
sem
もう1つのリソース の い は、 のhandle
Goパスを し、 チャネルからデータを み すことである.Goパスの は、 に び されるprocess
の を する.Serve
は、 に、 を するチャネルを し、すべてのGoパスが されると、チャネルからのメッセージの をブロックし、 する.func handle(queue chan *Request) {
for r := range queue {
process(r)
}
}
func Serve(clientRequests chan *Request, quit chan bool) {
//
for i := 0; i < MaxOutstanding; i++ {
go handle(clientRequests)
}
:https://www.cnblogs.com/gm-201705/p/8301690.html